#include <Copyright.h>
/********************************************************************************
* loadBalance.c
*
* DESCRIPTION:
*        This sample shows how to setup load balance among Trunk ports.
*        In this sample, port 0,1,2, and 3 will be in the Trunk group.
*
* DEPENDENCIES:
*
* FILE REVISION NUMBER:
*
* COMMENTS:
*******************************************************************************/

#include "msSample.h"


/*
   The following sample sets Trunk Mask Table as follows:

                      10    9    8    7    6    5    4    3    2    1    0
   TrunkMask[0]        1    1    1    1    1    1    1    0    0    0    1
   TrunkMask[1]        1    1    1    1    1    1    1    0    0    1    0
   TrunkMask[2]        1    1    1    1    1    1    1    0    1    0    0
   TrunkMask[3]        1    1    1    1    1    1    1    1    0    0    0
   TrunkMask[4]        1    1    1    1    1    1    1    0    0    0    1
   TrunkMask[5]        1    1    1    1    1    1    1    0    0    1    0
   TrunkMask[6]        1    1    1    1    1    1    1    0    1    0    0
   TrunkMask[7]        1    1    1    1    1    1    1    1    0    0    0
*/

GT_STATUS sampleLoadBalance(GT_QD_DEV *dev)
{
    GT_STATUS status;
    int i;
    GT_U32 mask, baseMask;

    baseMask = (1 << dev->numOfPorts) - 1;
    baseMask &= 0xFFF0;    /* clear bits for port 0 ~ 3 */

    /*
     *    Set the trunk mask table for load balancing.
    */
    for(i=0; i<8; i++)
    {
        mask = baseMask | (1 << (i%4));

        if((status = gsysSetTrunkMaskTable(dev,i,mask)) != GT_OK)
        {
            MSG_PRINT(("gsysSetTrunkMaskTable return Failed\n"));
            return status;
        }
    }

    return GT_OK;
}
